/*
 * Copyright (c) 2015 smarthome.com All rights reserved. 本软件源代码版权归----所有,未经许可不得任意复制与传播.
 */
package com.smarthome.base.service.base;

import java.io.Serializable;
import java.util.List;

import com.smarthome.domain.common.Page;

/**
 * service基类<实体,主键>
 * @author KongXiangyu
 * @since 2015-08-05
 * @param <T> 实体
 * @param <KEY> 主键
 */
public interface BaseService<T, KEY extends Serializable> {

    /**
     * 添加对象
     * @param t
     * @return
     */
    @SuppressWarnings("unchecked")
    int insert(T... t);

    /**
     * 删除对象,主键
     * @param ids 主键数组
     * @return 影响条数
     */
    @SuppressWarnings("unchecked")
    int deleteByIds(KEY... ids);

    /**
     * 按条件删除对象
     * @param condtion
     * @return 影响条数
     */
    int deleteByCondtion(T condtion);

    /**
     * 更新对象,条件主键Id
     * @param condtion 更新对象
     * @return 影响条数
     */
    int updateById(T condtion);

    /**
     * 保存或更新对象(条件主键Id)
     * @param t 需更新的对象
     * @return 影响条数
     */
    int saveOrUpdate(T t);

    /**
     * 查询对象,条件主键
     * @param id
     * @return 实体对象
     */
    T selectEntryById(KEY id);

    /**
     * 查询对象列表,主键数组
     * @param ids
     * @return 对象列表
     */
    @SuppressWarnings("unchecked")
    List<T> selectEntryListByIds(KEY... ids);

    /**
     * 查询对象,只要不为NULL与空则为条件
     * @param condtion 查询条件
     * @return 对象列表
     */
    List<T> selectEntryList(T condtion);

    /**
     * 分页查询
     * @param condtion 查询条件
     * @return 分页对象
     */
    Page<T> selectPage(T condtion, Page<T> page);
}
